package is202.hrms.web;

import is202.hrms.ejb.ForelesningEJB;
import is202.hrms.entity.Forelesning;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

/**
 * Backing bean for forelesning.xhtml. Named-annotasjonen forteller at det er en CDI-backing bean.
 * ConversationScoped-annotasjonen kontrollerer lifssyklusen til bønna.
 * @author Sondre
 */
@Named("forelbean")
@ConversationScoped
public class ForelesningBean implements Serializable {

    // @Inject-annotasjonen sender en forespørsel til serveren om å gi oss
    // et Conversation-objekt, og lagrer det i conv
    @Inject private Conversation conv;
    @EJB ForelesningEJB forelEjb;
    private Forelesning forelesning;
    private boolean updating;

    // Disse egenskapene vil bli kopiert til Forelesnings-objeket, og vil bli
    // lagret i databasen.
    private long forelesningNr;
    private String navn;
    private String tema;
    private String dato;
    private String kommentar;
                
    private List<Forelesning> forelesninger;

    public ForelesningBean() {
    }

    /**
     * Denne kalles når brukeren velger en forelesning fra lista i
     * forelesning.xhtml.
     */
    public void setForelesningNr(long forelesningNr) {
        if (conv.isTransient()) {
            conv.begin();
        }

        Forelesning forelesning = forelEjb.find(forelesningNr);
        if (null == forelesning) {
            // Hvis forelesningsNr ikke er gyldig, eller hvis forelesningsNr
            // er gyldig, men den ikke har noen forelesning med gitt 
            // forelesningsNr, vil vi bli sendt hit
            updating = false;
            forelesningNr = 0;
            navn = "";
            tema = "";
            dato = "";
            kommentar ="";
            forelesninger = new ArrayList<Forelesning>();
        }
        else {
            updating = true;
            this.forelesningNr = forelesning.getForelesningNr();
            navn = forelesning.getNavn();
            tema = forelesning.getTema();
            dato = forelesning.getDato();
            kommentar = forelesning.getKommentar();
            forelesninger = forelesning.getForelesninger();
        }
    }

    public long getForelesningNr() {
        return forelesningNr;
    }

    public String getNavn() {
        return navn;
    }

    public void setNavn(String navn) {
        this.navn = navn;
    }
    
        public String getTema() {
        return tema;
    }

    public void setTema(String tema) {
        this.tema = tema;
    }
    
        public String getDato() {
        return dato;
    }

    public void setDato(String dato) {
        this.dato = dato;
    }
    
        public String getKommentar() {
        return kommentar;
    }

    public void setKommentar(String kommentar) {
        this.kommentar = kommentar;
    }

    public List<Forelesning> getForelesninger() {
        return forelesninger;
    }

    public boolean isUpdating() {
        return updating;
    }

    private Forelesning createForelesningObject() {
        // Lager et forelesnings-objekt som inneholder data
        // fra en form. Objektet kan bli sendt videre til ForelesningListBean.
        Forelesning forelesning = new Forelesning();
        forelesning.setForelesningNr(forelesningNr);
        forelesning.setNavn(navn);
        forelesning.setTema(tema);
        forelesning.setDato(dato);
        forelesning.setKommentar(kommentar);
        return forelesning;
    }

    public View saveForelesning() {
        Forelesning forelesning = createForelesningObject();
        if (forelesning.getForelesningNr() > 0) forelEjb.update(forelesning);
        else forelEjb.insert(forelesning);
        return View.forelesninger;
    }

    public View deleteForelesning() {
        Forelesning forelesning = createForelesningObject();
        forelEjb.delete(forelesning);
        conv.end();

        return View.forelesninger;
    }
}
